{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "91c61059",
   "metadata": {},
   "outputs": [],
   "source": [
    "from pathlib import Path\n",
    "\n",
    "def get_png_files(directory):\n",
    "    path = Path(directory)\n",
    "    return [str(file.resolve()) for file in path.rglob('*.png')]  # 递归匹配.png文件\n",
    "def get_xml_files(directory):\n",
    "    path = Path(directory)\n",
    "    return [str(file.resolve()) for file in path.rglob('*.xml')]  # 递归匹配.png文件\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "c0d6bc95",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "from shapely.geometry import Polygon\n",
    "from shapely.ops import unary_union\n",
    "import xml.etree.ElementTree as ET\n",
    "from PIL import Image, ImageDraw\n",
    "\n",
    "def parse_xml_and_calculate_union_areas(xml_content):\n",
    "    # 解析XML\n",
    "    root = ET.fromstring(xml_content)\n",
    "\n",
    "    size = root.find('size')\n",
    "    image_size=(int(size.find('width').text),int(size.find('height').text))\n",
    " \n",
    "\n",
    "    # 存储各类别的多边形\n",
    "    class_polygons = {}\n",
    "    \n",
    "    # 遍历所有object元素\n",
    "    for obj in root.findall('object'):\n",
    "        name = obj.find('name').text\n",
    "        bbox = obj.find('bndbox')\n",
    "        xmin = int(bbox.find('xmin').text)\n",
    "        ymin = int(bbox.find('ymin').text)\n",
    "        xmax = int(bbox.find('xmax').text)\n",
    "        ymax = int(bbox.find('ymax').text)\n",
    "        \n",
    "        # 创建矩形多边形\n",
    "        polygon = Polygon([\n",
    "            (xmin, ymin),\n",
    "            (xmax, ymin),\n",
    "            (xmax, ymax),\n",
    "            (xmin, ymax)\n",
    "        ])\n",
    "        \n",
    "        if name not in class_polygons:\n",
    "            class_polygons[name] = []\n",
    "        class_polygons[name].append(polygon)\n",
    "    \n",
    "    # 计算每个类别的并集并转换为numpy数组\n",
    "    class_masks = {}\n",
    "    for name, polygons in class_polygons.items():\n",
    "        if len(polygons) > 1:\n",
    "            union = unary_union(polygons)\n",
    "        else:\n",
    "            union = polygons[0]\n",
    "        \n",
    "        # 创建一个空白图像\n",
    "        img = Image.new('L', image_size, 0)\n",
    "        draw = ImageDraw.Draw(img)\n",
    "        \n",
    "        # 绘制多边形\n",
    "        if union.geom_type == 'Polygon':\n",
    "            exterior = list(union.exterior.coords)\n",
    "            draw.polygon(exterior, fill=255)\n",
    "            for interior in union.interiors:\n",
    "                draw.polygon(list(interior.coords), fill=0)\n",
    "        elif union.geom_type == 'MultiPolygon':\n",
    "            for poly in union.geoms:\n",
    "                exterior = list(poly.exterior.coords)\n",
    "                draw.polygon(exterior, fill=255)\n",
    "                for interior in poly.interiors:\n",
    "                    draw.polygon(list(interior.coords), fill=0)\n",
    "        \n",
    "        # 转换为numpy数组\n",
    "        mask = np.array(img)\n",
    "        class_masks[name] = mask\n",
    "    \n",
    "    return class_masks"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "a326cf75",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "03649.xml\n"
     ]
    }
   ],
   "source": [
    "xml_file_path=get_xml_files(\"/data/dataset/M3FD/M3FD_Detection\")\n",
    "# print(xml_file_path[1])\n",
    "# print(len(xml_file_path))\n",
    "# 读取XML文件\n",
    "import os\n",
    "path=xml_file_path[48]\n",
    "tree = ET.parse(path)  # 替换为你的XML文件路径\n",
    "root = tree.getroot()\n",
    "file_name = os.path.basename(path)  # 输出: \"00001.xml\n",
    "# 将整个XML内容转为字符串\n",
    "xml_content = ET.tostring(root, encoding='unicode')\n",
    "print(file_name)\n",
    "result = parse_xml_and_calculate_union_areas(xml_content)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "65ba4b60",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'Car': array([[  0,   0,   0, ...,   0,   0,   0],\n",
       "        [  0,   0,   0, ...,   0,   0,   0],\n",
       "        [  0,   0,   0, ...,   0,   0,   0],\n",
       "        ...,\n",
       "        [  0,   0,   0, ..., 255, 255, 255],\n",
       "        [  0,   0,   0, ..., 255, 255, 255],\n",
       "        [  0,   0,   0, ..., 255, 255, 255]], dtype=uint8),\n",
       " 'Truck': array([[0, 0, 0, ..., 0, 0, 0],\n",
       "        [0, 0, 0, ..., 0, 0, 0],\n",
       "        [0, 0, 0, ..., 0, 0, 0],\n",
       "        ...,\n",
       "        [0, 0, 0, ..., 0, 0, 0],\n",
       "        [0, 0, 0, ..., 0, 0, 0],\n",
       "        [0, 0, 0, ..., 0, 0, 0]], dtype=uint8),\n",
       " 'People': array([[0, 0, 0, ..., 0, 0, 0],\n",
       "        [0, 0, 0, ..., 0, 0, 0],\n",
       "        [0, 0, 0, ..., 0, 0, 0],\n",
       "        ...,\n",
       "        [0, 0, 0, ..., 0, 0, 0],\n",
       "        [0, 0, 0, ..., 0, 0, 0],\n",
       "        [0, 0, 0, ..., 0, 0, 0]], dtype=uint8)}"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "1be71e98",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(result)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "57906ca8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzQAAAKECAYAAADRz3+2AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAcNVJREFUeJzt3XtcVNX6x/HvcEcRCBSQIyp6MiWveSXLLElStCyzLPOW6TketJTjJcu07EJZqVleqlNqJ02z0srKMk0txUuY5j0rE0rBUgHFuM7+/eFhfk6gAgOzGfm8X6/9ytl7zV5rz0abh2etZ1sMwzAEAAAAAC7IzewBAAAAAEB5EdAAAAAAcFkENAAAAABcFgENAAAAAJdFQAMAAADAZRHQAAAAAHBZBDQAAAAAXBYBDQAAAACX5WH2AAAAAABXlpOTo7y8PFP69vLyko+Pjyl9VxUENAAAAEA55eTkKLKBn9KOF5rSf1hYmA4fPlytgxoCGgAAAKCc8vLylHa8UEeSG8q/lnNXc2SdtqpB21+Ul5dHQAMAAACg/PxqWeRXy+LUPq1ybn9VFUUBAAAAALgsMjQAAACAgwoNqwoN5/cJMjQAAAAAXBgBDQAAAACXxZQzAAAAwEFWGbLKuXPOnN1fVUWGBgAAAKgGEhMT1b59e9WqVUshISHq06ePDh48aNema9euslgsdts///lPuzYpKSmKi4tTjRo1FBISovHjx6ugoMCZl2KHDA0AAADgIKuscvYS/bL2uGHDBsXHx6t9+/YqKCjQI488ou7du2vfvn2qWbOmrd3w4cM1bdo02+saNWrY/lxYWKi4uDiFhYVp8+bNOnbsmAYNGiRPT08988wzjl9UORDQAAAAANXA6tWr7V4vXLhQISEhSk5OVpcuXWz7a9SoobCwsBLP8cUXX2jfvn368ssvFRoaqtatW+vJJ5/UxIkT9fjjj8vLy6tSr6EkTDkDAAAAXFhWVpbdlpubW6r3ZWZmSpKCgoLs9i9evFi1a9dW8+bNNWnSJJ09e9Z2LCkpSS1atFBoaKhtX2xsrLKysrR3794KuJqyI0MDAAAAOKjQMFRoOHeRflF/ERERdvunTp2qxx9//KLvtVqtGjNmjDp37qzmzZvb9t97771q0KCBwsPD9f3332vixIk6ePCgPvjgA0lSWlqaXTAjyfY6LS3N0UsqFwIaAAAAwIWlpqbK39/f9trb2/uS74mPj9eePXv0zTff2O0fMWKE7c8tWrRQ3bp11a1bN/30009q3LhxxQ26AjHlDAAAAHBQUdlmZ2+S5O/vb7ddKqAZNWqUVq1apa+++kr16tW7aNuOHTtKkn788UdJUlhYmNLT0+3aFL2+0LqbykZAAwAAAFQDhmFo1KhRWrFihdatW6fIyMhLvmfnzp2SpLp160qSoqOjtXv3bh0/ftzWZs2aNfL391dUVFSljPtSmHIGAAAAOMgqQ4VV/MGa8fHxWrJkiT788EPVqlXLtuYlICBAvr6++umnn7RkyRL17NlTwcHB+v777zV27Fh16dJFLVu2lCR1795dUVFRGjhwoKZPn660tDRNnjxZ8fHxpZrqVhkshuHk1UsAAADAZSIrK0sBAQE6fKCuatVy7uSn06etimx6TJmZmXZraC7EYrGUuH/BggUaMmSIUlNTdd9992nPnj3Kzs5WRESEbr/9dk2ePNnu/EeOHNHIkSO1fv161axZU4MHD9azzz4rDw9zciUENAAAAEA5uVJAc7liyhkAAADgoPMX6TuzT1AUAAAAAIALI0MDAAAAOMjMB2tWd2RoAAAAALgsAhoAAAAALospZwAAAICDrP/bnN0nyNAAAAAAcGFkaAAAAAAHFcpQoZPLKDu7v6qKDA0AAAAAl0WGBgAAAHBQoXFuc3afIEMDAAAAwIUR0AAAAABwWUw5AwAAABxE2WbzkKEBAAAA4LLI0AAAAAAOssqiQlmc3ifI0AAAAABwYQQ0AAAAAFwWU84AAAAAB1mNc5uz+wQZGgAAAAAujAwNAAAA4KBCE4oCOLu/qooMDQAAAACXRYYGAAAAcBAZGvOQoQEAAADgsghoAAAAALgsppwBAAAADrIaFlkN504Bc3Z/VRUZGgAAAAAuiwwNAAAA4CCKApiHDA0AAAAAl0VAAwAAAMBlMeUMAAAAcFCh3FTo5FxBoVN7q7rI0AAAAABwWWRoAAAAAAcZJpRtNijbLIkMDQAAAAAXRoYGAAAAcBBlm81DhgYAKtHzzz+vRo0ayd3dXa1bt75k+549e2r48OGVP7BqKj8/XxEREZo7d67ZQwEAVBACGqAaWbhwoSwWi7799tsSj3ft2lXNmzev1DF8+umnevzxxyu1j6riiy++0IQJE9S5c2ctWLBAzzzzzEXbb9q0SV988YUmTpxo2/f444/LYrFccNu0aZPdOaxWq+bNm6fWrVvL19dXwcHBuummm7Rr1y67dseOHdOIESMUGRkpX19fNW7cWAkJCTpx4kS5r3fevHnq16+f6tevL4vFoiFDhlywbUZGhkaMGKE6deqoZs2auvHGG7Vjxw67NidOnNDzzz+vLl26qE6dOgoMDFSnTp20bNmyS47l6aeflsViKfbz7OnpqYSEBD399NPKyckp0/Xt379fFotFPj4+ysjIKNN7AQCVhylnAJzq008/1Zw5c6pFULNu3Tq5ubnpjTfekJeX1yXbP//88+rWrZv+/ve/2/bdcccddq+LPPLIIzpz5ozat29vt//+++/X4sWLNWjQII0aNUrZ2dn67rvvdPz4cVubM2fOKDo6WtnZ2frXv/6liIgI7dq1S6+88oq++uorJScny82t7L/veu6553T69Gl16NBBx44du2A7q9WquLg47dq1S+PHj1ft2rU1d+5cde3aVcnJybryyislSUlJSXr00UfVs2dPTZ48WR4eHnr//ffVv39/7du3T0888USJ5//111/1zDPPqGbNmiUeHzp0qB5++GEtWbJE999/f6mv7+2331ZYWJhOnTql9957Tw888ECp3wvg8ldouKnQcHLZZsOp3VVZBDQAUEmOHz8uX1/fUgUzx48f1yeffKL58+fb7W/ZsqVatmxpty81NVW//vqrHnjgAbtzv/vuu1q0aJE++OAD3X777Rfs66OPPtKRI0e0atUqxcXF2fYHBQVp2rRp2rVrl9q0aVPay7TZsGGDLTvj5+d3wXbvvfeeNm/erOXLl+vOO++UJN11111q0qSJpk6dqiVLlkiSrr76ah06dEgNGjSwvfdf//qXYmJi9Nxzz2nChAklBi3jxo1Tp06dVFhYqD/++KPY8cDAQHXv3l0LFy4sdUBjGIaWLFmie++9V4cPH9bixYtLFdAYhqGcnBz5+voWO5aTkyMvL69yBY8AgP/Hv6IALuntt99W27Zt5evrq6CgIPXv31+pqal2bb7++mvbdCNvb29FRERo7Nix+vPPP21thgwZojlz5kiS3bQpSfrll19ksVj0wgsvaM6cOWrUqJFq1Kih7t27KzU1VYZh6Mknn1S9evXk6+ur2267TSdPnrQbw4cffqi4uDiFh4fL29tbjRs31pNPPqnCQvtHjxVNrUtOTta1114r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jIxifTZv3lxt2rTR4sWLVa9ePaWkpBSbfgcA1Q1raABc0B133CF3d3c98cQTxaZDGYZhe6p8Ufbk/DaGYeill14qds6iAKKin7Re0hjy8vI0d+7cEtsXFBTo1VdftWv76quvqk6dOmrbtu0F++nZs6ckFSsLPGPGDEmye65LWURHR+vUqVMlliKWzgUby5cv13XXXVdsWl6Ru+++W6mpqXaB5B9//KEPP/xQN910ky14aNKkidLT07V+/Xq79xdV7SrPM2jK4s4771R6ero++OADu3EuX75cvXv3tltfs2zZMj344IMaMGCA7TP+q+bNm2vFihXFtquvvlr169fXihUrNGzYMLv3JCcny2KxKDo6+qJjffvtt9WoUSP985//1J133mm3jRs3Tn5+fnZrWsrD3d292N+v5cuXlxicStLAgQP1xRdfaNasWQoODlaPHj0c6h9AxThXttn5G8jQALiIxo0b66mnntKkSZP0yy+/qE+fPqpVq5YOHz6sFStWaMSIERo3bpyaNm2qxo0ba9y4cfrtt9/k7++v999/v8QpVEXBwoMPPqjY2Fi5u7vblTsur2uvvVZXXHGFBg8erAcffFAWi0X//e9/L7guJTw8XM8995x++eUXNWnSRMuWLdPOnTv12muv2a0N+qtWrVpp8ODBeu2112zT3LZt26ZFixapT58+uvHGG8s1/ri4OHl4eOjLL7/UiBEjih3//PPPdeLEiYuW5p00aZLeffdd9e3bVwkJCQoICND8+fOVn59vt85j1KhRWrBggXr37q3Ro0erQYMG2rBhg9555x3dfPPNdmtwFi5cqKFDh2rBggUaMmTIRa/h448/tj07JT8/X99//72tGMGtt95qW/dz5513qlOnTho6dKj27dun2rVra+7cuSosLNQTTzxhO9+2bds0aNAgBQcHq1u3bsUCh2uvvVaNGjVS7dq11adPn2LjKQo6Szq2Zs0ade7c2W6Nyl8dPXpUX331VYlZH+ncYv7Y2FgtX75cs2fPvujPzcX06tVL06ZN09ChQ3Xttddq9+7dWrx4sRo1alRi+3vvvVcTJkzQihUrNHLkyHL3CwCXCwIaABf18MMPq0mTJpo5c6bty2ZERIS6d++uW2+9VdK54gAff/yxHnzwQSUmJsrHx0e33367Ro0aVWzx9h133KHRo0dr6dKlevvtt2UYRoUENMHBwVq1apX+/e9/a/Lkybriiit03333qVu3biVWnLriiiu0aNEijR49Wq+//rpCQ0P1yiuvaPjw4Zfs6z//+Y8aNWqkhQsXasWKFQoLC9OkSZM0derUco8/NDRUPXv21LvvvltiQLN48WJ5enpedPF3aGiovvnmG40bN04zZ85Ufn6+oqOj9fbbb9vdh6uuukrJycmaPHmy3n77baWlpSk8PFzjxo2zCyik/6+eVvTQzYt5//33tWjRItvr7777zlbhrl69eraAxt3dXZ9++qnGjx+v2bNn688//1T79u21cOFCXXXVVbb379u3T3l5efr99991//33F+tvwYIFF/zSfzGZmZn64osvLpi9K7J06VJZrVb17t37gm169+6t999/X5999pnt70NZPfLII8rOztaSJUu0bNkyXXPNNfrkk08uWHEuNDRU3bt316efflpsPREAVEcW41JldQDgMtO1a1f98ccf2rNnj9lDsfP111+ra9euOnDgwAUryznbXXfdpV9++UXbtm0zeygVZtasWZo+fbp++umniy7gr8puv/127d6921Z1DYB5srKyFBAQoOW7mqpGrZIL2FSWs6cL1a/VAWVmZsrf39+pfVclrKEBgCri+uuvV/fu3TV9+nSzhyLp3Hqk9evXF3uGjSvLz8/XjBkzNHnyZJcNZo4dO6ZPPvmE7AwA/A9TzgCgCvnss8/MHoKNxWLR8ePHzR5GhfL09FRKSorZwyiXw4cPa9OmTfrPf/4jT09PuwfDAjAfZZvNQ4YGAAAXsGHDBg0cOFCHDx/WokWLFBYWZvaQAKBKuGwCmjlz5qhhw4by8fFRx44dL6v53gAq1vr166vc+hngUoYMGSLDMHTkyBHdeeedZg8HAKqMyyKgWbZsmRISEjR16lTt2LFDrVq1Umxs7GU3VQIAAABVk1Vupmy4TAKaGTNmaPjw4Ro6dKiioqI0f/581ahRQ2+++abZQwMAAABQiVy+KEBeXp6Sk5M1adIk2z43NzfFxMQoKSmpxPfk5uYqNzfX9tpqterkyZMKDg6WxcITVwEAAKoawzB0+vRphYeHy82t6v1OvtCwqNBw7vdIZ/dXVbl8QPPHH3+osLBQoaGhdvtDQ0N14MCBEt+TmJhY7OFxAAAAqPpSU1NVr149s4eBKsTlA5rymDRpkhISEmyvMzMzVb9+fV2nnvKQ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gADblpiYWK7z3HLLLXrrrbe0du1aPffcc9qwYYN69OihwsJCSVJaWppCQkLs3uPh4aGgoCClpaU5fB3lZeqUs3r16unZZ5/VlVdeKcMwtGjRIt1222367rvvdPXVV2vs2LH65JNPtHz5cgUEBGjUqFG64447tGnTJklSYWGh4uLiFBYWps2bN+vYsWMaNGiQPD099cwzz5h5aQAAAIBTpKamyt/f3/ba29u7XOfp37+/7c8tWrRQy5Yt1bhxY61fv17dunVzeJyVxdSApnfv3navn376ac2bN09btmxRvXr19MYbb2jJkiW66aabJEkLFixQs2bNtGXLFnXq1ElffPGF9u3bpy+//FKhoaFq3bq1nnzySU2cOFGPP/64vLy8zLgsAAAAVDOGYZHh5OfCFPVXNNupojVq1Ei1a9fWjz/+qG7duiksLEzHjx+3a1NQUKCTJ09ecN2NM1SZNTSFhYVaunSpsrOzFR0dreTkZOXn5ysmJsbWpmnTpqpfv76SkpIknZvH16JFC4WGhtraxMbGKisrS3v37r1gX7m5ucXmGgIAAAD4f7/++qtOnDihunXrSpKio6OVkZGh5ORkW5t169bJarWqY8eOZg3T/Cpnu3fvVnR0tHJycuTn56cVK1YoKipKO3fulJeXlwIDA+3ah4aG2ubopaWl2QUzRceLjl1IYmKinnjiiYq9EAAAAFRvZSyj7GxnzpzRjz/+aHt9+PBh7dy5U0FBQQoKCtITTzyhvn37KiwsTD/99JMmTJigv//974qNjZUkNWvWTLfccouGDx+u+fPnKz8/X6NGjVL//v1Nq3AmVYEMzVVXXaWdO3dq69atGjlypAYPHqx9+/ZVap+TJk1SZmambUtNTa3U/gAAAACzffvtt2rTpo3atGkjSUpISFCbNm00ZcoUubu76/vvv9ett96qJk2aaNiwYWrbtq2+/vpruzU5ixcvVtOmTdWtWzf17NlT1113nV577TWzLklSFcjQeHl56e9//7skqW3bttq+fbteeukl3X333crLy1NGRoZdliY9Pd02Ry8sLEzbtm2zO19RFbSLzePz9vYu92IpAAAA4K/MXENTWl27dpVxkadxfv7555c8R1BQkJYsWVKmfiub6Rmav7JarcrNzVXbtm3l6emptWvX2o4dPHhQKSkpio6OlnRuHt/u3bvtFietWbNG/v7+ioqKcvrYAQAAADiXqRmaSZMmqUePHqpfv75Onz6tJUuWaP369fr8888VEBCgYcOGKSEhQUFBQfL399fo0aMVHR2tTp06SZK6d++uqKgoDRw4UNOnT1daWpomT56s+Ph4MjAAAABANWBqQHP8+HENGjRIx44dU0BAgFq2bKnPP/9cN998syRp5syZcnNzU9++fZWbm6vY2FjNnTvX9n53d3etWrVKI0eOVHR0tGrWrKnBgwdr2rRpZl0SAAAAqiNDzi8KUMWLEDiLxbjYRLpqIisrSwEBAeqq2+Rh8TR7OAAAAPiLAiNf6/WhMjMzK+WZK+VV9D0yYv5Uufn6OLVv6585Sv3nE1XuM3E204sCAAAAAK7P8r/N2X2iyhUFAAAAAIDSIqABAAAA4LKYcgYAAAA4iqIApiFDAwAAAMBlkaEBAAAAHEWGxjRkaAAAAAC4rHJlaA4fPqyvv/5aR44c0dmzZ1WnTh21adNG0dHR8vFxbv1tAAAAwHSG5dzm7D5RtoBm8eLFeumll/Ttt98qNDRU4eHh8vX11cmTJ/XTTz/Jx8dHAwYM0MSJE9WgQYPKGjMAAAAASCpDQNOmTRt5eXlpyJAhev/99xUREWF3PDc3V0lJSVq6dKnatWunuXPnql+/fhU+YAAAAAAoUuqA5tlnn1VsbOwFj3t7e6tr167q2rWrnn76af3yyy8VMT4AAACgyjOMc5uz+0QZApqLBTN/FRwcrODg4HINCAAAAABKq8xFAQoLC3XkyBE1bNhQbm5uys3N1Ycffiir1aobb7xRoaGhlTFOAAAAoOqibLNpyhTQfP/997rllluUnp6uqKgoffrpp+rZs6cOHz4si8UiT09Pff7552rfvn1ljRcAAAAAbMr0HJoJEyaoc+fO2rVrl7p166bY2Fg1a9ZMp06d0qlTpxQXF6dHHnmkssYKAAAAAHbKlKHZtm2bNm3apGbNmikxMVGvvPKKFi5cKE9PT0nSww8/rBtuuKFSBgoAAABUWTyHxjRlytAYhiEPj3Mx0F//K0nu7u6yWq0VODwAAAAAuLAyBTRt27bVc889p99++02JiYmKjIzUK6+8Yjv+8ssvq3nz5hU+SAAAAKAqsxjmbCjjlLPExET16NFDCxYsUHBwsL766isNGzZMdevWlZubm06dOqWPP/64ssYKAAAAAHbKFNC0b99eR44c0YEDB3TVVVfJz89P69ev1+LFi/Xnn3/q5ptv1lVXXVVZYwUAAACqJso2m6bMz6GpWbOm2rZta3vt4+OjYcOGVeigAAAAAKA0yhzQnC8jI0PLly9XSkqKGjZsqDvvvFMBAQEVNTYAAAAAuKgyFQW444479N5770mS9u7dqyuvvFKPPvqo1qxZo0cffVRNmzbV/v37K2WgAAAAQJVVVLbZ2RvKFtCsX7/eVsVs/Pjx6t69u3799Vdt2bJFqampiouL05gxYypjnAAAAABQTJmmnOXk5Ngeorlz50598skn8vLykiR5enpqwoQJ6tChQ8WPEgAAAKjKKApgmjJlaFq2bKl169ZJksLCwnTkyBG740eOHJGvr2/FjQ4AAAAALqJMGZrHHntMgwYNkqenpx588EGNHTtWJ06cULNmzXTw4EFNnTpVAwcOrKyxAgAAAICdMgU0cXFxeu211zRmzBgdPXpUhmFo+PDhkiRvb2/985//VGJiYqUMFAAAAKiymHJWagUFBVq/fr1++ukn3XvvvapVq5aOHj0qf39/+fn5lfl8ZS7b3LdvX/Xp00c7duzQzz//LKvVqrp166pt27aqVatWmQcAAAAAoHo4cuSIbrnlFqWkpCg3N1c333yzatWqpeeee065ubmaP39+mc9ZrufQuLu7q3379mrfvn153g4AAABcXsjQlMpDDz2kdu3aadeuXQoODrbtv/32220zv8qqTEUBXnzxxWKFAAAAAACgNL7++mtNnjzZVim5SMOGDfXbb7+V65xlCmjGjx+vxo0b6+abb9ayZcuUl5dXrk4BAACAywoP1iwVq9WqwsLCYvt//fXXci9fKVNAI0n/+c9/VLNmTQ0cOFDh4eEaM2aM9uzZU67OAQAAAFQf3bt316xZs2yvLRaLzpw5o6lTp6pnz57lOmeZA5qePXtq5cqV+vXXXzVhwgR9/vnnatWqlTp06KDXX39dp0+fLtdAAAAAAFzeXnzxRW3atElRUVHKycnRvffea5tu9txzz5XrnGUOaIqEhIRowoQJ2r9/v9avX6+oqCiNHTtWdevWLe8pAQAAAJdkMczZXE29evW0a9cuPfLIIxo7dqzatGmjZ599Vt99951CQkLKdc4yVTmzWEqep3f99dfr+uuv1+zZs7Vs2bJyDQQAAADA5c/Dw0P33XdfxZ2vLI0N4+JhoL+/f7nLrQEAAAAui7LNpfLWW29d9PigQYPKfM4yBTRWq7XMHQAAAACAdO45NOfLz8/X2bNn5eXlpRo1apQroCn3GhoAAAAAKItTp07ZbWfOnNHBgwd13XXX6Z133inXOUsd0Dz77LM6e/Zsqdpu3bpVn3zySbkGBAAAAKD6uPLKK/Xss88Wy96UVqkDmn379qlBgwb617/+pc8++0y///677VhBQYG+//57zZ07V9dee63uvvvucj8YBwAAAED14uHhoaNHj5bvvaVt+NZbb2nXrl165ZVXdO+99yorK0vu7u7y9va2ZW7atGmjBx54QEOGDJGPj0+5BgQAAAC4GoucX0a55PrDVdtHH31k99owDB07dkyvvPKKOnfuXK5zlqkoQKtWrfT666/r1Vdf1ffff68jR47ozz//VO3atdW6dWvVrl27XIMAAAAAcPnr06eP3WuLxaI6deropptu0osvvliuc5YpoCni5uam1q1bq3Xr1uXqFAAAAED1UxlVk8sV0AAAAAA4j2E5tzm7TxDQAAAAAKg8CQkJpW47Y8aMMp+fgAYAAABwlPG/zdl9uoDvvvuuVO0slvJlnAhoAAAAAFSar776qlLPX+rn0FxMVlaWVq5cqf3791fE6QAAAADXYpi0oXwBzV133aVXXnlFkvTnn3+qXbt2uuuuu9SyZUu9//775RrIs88+K4vFojFjxtj25eTkKD4+XsHBwfLz81Pfvn2Vnp5u976UlBTFxcWpRo0aCgkJ0fjx41VQUFCuMQAAAACoXN9++60mTJig/v3764477rDbyqNcAc3GjRt1/fXXS5JWrFghwzCUkZGh2bNn66mnnirz+bZv365XX31VLVu2tNs/duxYffzxx1q+fLk2bNigo0eP2l1oYWGh4uLilJeXp82bN2vRokVauHChpkyZUp7LAgAAAFCJli5dqmuvvVb79+/XihUrlJ+fr71792rdunUKCAgo1znLFdBkZmYqKChIkrR69Wr17dtXNWrUUFxcnA4dOlSmc505c0YDBgzQ66+/riuuuMKujzfeeEMzZszQTTfdpLZt22rBggXavHmztmzZIkn64osvtG/fPr399ttq3bq1evTooSeffFJz5sxRXl5eeS4NAAAAKDOLYc7map555hnNnDlTH3/8sby8vPTSSy/pwIEDuuuuu1S/fv1ynbNcAU1ERISSkpKUnZ2t1atXq3v37pKkU6dOycfHp0znio+PV1xcnGJiYuz2JycnKz8/325/06ZNVb9+fSUlJUmSkpKS1KJFC4WGhtraxMbGKisrS3v37r1gn7m5ucrKyrLbAAAAAFSun376SXFxcZIkLy8vZWdny2KxaOzYsXrttdfKdc5yBTRjxozRgAEDVK9ePYWHh6tr166Szk1Fa9GiRanPs3TpUu3YsUOJiYnFjqWlpcnLy0uBgYF2+0NDQ5WWlmZrc34wU3S86NiFJCYmKiAgwLZFRESUeswAAABAMRQFKJUrrrhCp0+fliT97W9/0549eyRJGRkZOnv2bLnOWa6A5l//+peSkpL05ptv6ptvvpGb27nTNGrUqNRraFJTU/XQQw9p8eLFZc7qOGrSpEnKzMy0bampqU7tHwAAAKhOigKXLl26aM2aNZKkfv366aGHHtLw4cN1zz33qFu3buU6d7meQ/Pzzz+rXbt2ateund3+ovRRaSQnJ+v48eO65pprbPsKCwu1ceNGvfLKK/r888+Vl5enjIwMuyxNenq6wsLCJElhYWHatm2b3XmLqqAVtSmJt7e3vL29Sz1WAAAAAOXXsmVLtW/fXn369FG/fv0kSY8++qg8PT21efNm9e3bV5MnTy7XucuVofn73/+u+vXra+DAgXrjjTf0448/lvkc3bp10+7du7Vz507b1q5dOw0YMMD2Z09PT61du9b2noMHDyolJUXR0dGSpOjoaO3evVvHjx+3tVmzZo38/f0VFRVVnksDAAAAyo4pZxe1YcMGXX311UpMTFSzZs00ePBgbdq0SQ8//LA++ugjvfjii3YFwsqiXAFNamqqEhMT5evrq+nTp6tJkyaqV6+eBgwYoP/85z+lOketWrXUvHlzu61mzZoKDg5W8+bNFRAQoGHDhikhIUFfffWVkpOTNXToUEVHR6tTp06SpO7duysqKkoDBw7Url279Pnnn2vy5MmKj48nAwMAAABUEddff73efPNNHTt2TC+//LJ++eUX3XDDDWrSpImee+65i65/v5RyBTR/+9vfNGDAAL322ms6ePCgDh48qJiYGL377rv6xz/+Ue7B/NXMmTPVq1cv9e3bV126dFFYWJg++OAD23F3d3etWrVK7u7uio6O1n333adBgwZp2rRpFTYGAAAA4FIo21w6NWvW1NChQ7Vhwwb98MMP6tevn+bMmaP69evr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VqNGjeTt7a2IiAj17t1ba9euNXtoTpGTk6PHHntMU6dOte3bu3ev+vbtq4YNG8pisWjWrFklvnfOnDlq2LChfHx81LFjR23bts127OTJkxo9erSuuuoq+fr6qn79+nrwwQeVmZlZ4rlOnDihevXqyWKxKCMjw7b//vvv144dO/T1119XyPUCAC4vBDQAqrVffvlFbdu21bp16/T8889r9+7dWr16tW688UbFx8ebPTyneO+99+Tv76/OnTvb9p09e1aNGjXSs88+q7CwsBLft2zZMiUkJGjq1KnasWOHWrVqpdjYWB0/flySdPToUR09elQvvPCC9uzZo4ULF2r16tUaNmxYiecbNmyYWrZsWWy/l5eX7r33Xs2ePbsCrhYAKonTszMmFCGooghoAFRr//rXv2SxWLRt2zb17dtXTZo00dVXX62EhARt2bLF1i4lJUW33Xab/Pz85O/vr7vuukvp6ekXPG/Xrl01ZswYu319+vTRkCFDbK8bNmyop556SoMGDZKfn58aNGigjz76SL///rutr5YtW+rbb7+1vWfhwoUKDAzU559/rmbNmsnPz0+33HKLjh07Zmuzfv16dejQQTVr1lRgYKA6d+6sI0eOXHCsS5cuLTalq3379nr++efVv39/eXt7l/i+GTNmaPjw4Ro6dKiioqI0f/581ahRQ2+++aYkqXnz5nr//ffVu3dvNW7cWDfddJOefvppffzxxyooKLA717x585SRkaFx48aV2Ffv3r310Ucf6c8//7zgdQAAqicCGgDV1smTJ7V69WrFx8erZs2axY4HBgZKkqxWq2677TadPHlSGzZs0Jo1a/Tzzz/r7rvvdngMM2fOVOfOnfXdd98pLi5OAwcO1KBBg3Tfffdpx44daty4sQYNGiTjvN/CnT17Vi+88IL++9//auPGjUpJSbEFAgUFBerTp49uuOEGff/990pKStKIESNksVguOIZvvvlG7dq1K9O48/LylJycrJiYGNs+Nzc3xcTEKCkp6YLvy8zMlL+/vzw8/v+pAfv27dO0adP01ltvyc2t5P8ttWvXTgUFBdq6dWuZxgkAuPzxHBoA1daPP/4owzDUtGnTi7Zbu3atdu/ercOHDysiIkKS9NZbb+nqq6/W9u3b1b59+3KPoWfPnvrHP/4hSZoyZYrmzZun9u3bq1+/fpKkiRMnKjo6Wunp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",
      "text/plain": [
       "<Figure size 1000x800 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "# x=result[\"Car\"]\n",
    "y=result[\"Car\"]\n",
    "\n",
    "# 绘制热力图\n",
    "plt.figure(figsize=(10, 8))\n",
    "plt.imshow(y, cmap='viridis')  # 可选颜色映射：'hot', 'cool', 'plasma'等\n",
    "plt.colorbar(label='Value')  # 添加颜色条\n",
    "plt.title('Heatmap of (768, 1024) Array')\n",
    "plt.xlabel('Columns (1024)')\n",
    "plt.ylabel('Rows (768)')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6b1e4294",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "llava",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.17"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
